#define MAXSIZE 1000
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE 1
#define OVERFLOW 1
#define NULLNODE -1
#define SLHead 0

typedef int Status;
typedef int DataType;
typedef int NextDataPoint;
typedef int Point;
typedef int *Pt;

typedef struct
{
	DataType data;//该节点的数据域,其中头节点里存放该链表元素个数，即顺序表长度 
	NextDataPoint cur;//指向下一个结点的指针 
}SLNode,SLinkList[MAXSIZE];//默认带头节点，即数组0位置为头节点 

void Init_SLinkList(SLinkList S);//初始化一个空的线性表S
void Head_Init_SLinkList(SLinkList S);//初始化一个空的线性表S
void Tail_Init_SLinkList(SLinkList S);//初始化一个空的线性表S
//Status DestoryList(int* L);//销毁线性表S
void ClearList(SLinkList S);//清空线性表S

Status IsEmptySLinkList(SLinkList S);//若S为空表，则返回TRUE,否则返回FALSE
DataType SLinkListLength(SLinkList S);//返回S中数据元素个数
DataType GetElem(SLinkList S,DataType i,Pt e);//用e返回S中第i个元素的值,操作成功返回OK，否则返回ERROR
DataType LocateElem(SLinkList S,DataType e);//返回e在S中的位置,有该数据元素则返回其位置，否则返回0

Status PriorElem(SLinkList S,DataType e,Pt proe);//若若e是S的数据元素，且不是第一个，则用proe返回它的前驱。操作成功返回OK,否则返回-6699
Status NextElem(SLinkList S,DataType e,Pt nexte);//若e是S的数据元素，且不是最后一个，则用nexte返回它的后继。操作成功返回OK,否则返回-6699
Status SLinkListInsert(SLinkList S,DataType i,DataType e);//在S第i个位置之前插入新的元素e，S长度加1,成功操作返回OK，否则返回ERROR
DataType SLinkListDelete(SLinkList S,DataType i,Pt e);//删除S的第i个数据元素，并用e返回其值，S长度减1,操作成功返回删除的值，否则返回ERROR

Status SLinkListTraverse(SLinkList S);//依次对S每个数据元素调用函数,成功遍历返回OK，否则返回ERROR